const mime = require('mime');

module.exports = (config, utils, store) => {

    return async (ctx, next) => {

        // 请求路径
        const url = ctx.path;
        // 请求方法
        const method = ctx.method;
        // 拿到mock数据
        const mockMap = config.routerData;
        // 拿到moc数据的配置信息
        const mockOpt = mockMap[url];
        // 获取请求参数
        const param = utils.getParam(ctx);
        
        // 用是否对此url有配置，是否有对应请求方法，方法是否匹配，来判断是否有mock数据
        if(mockOpt && mockOpt.method && method.toLowerCase() === mockOpt.method.toLowerCase()) {
            // mock数据必须是一个async函数
            if(Object.prototype.toString.call(mockOpt.data) === '[object AsyncFunction]') {
                let data = await mockOpt.data(param, store, ctx);
                let type = mime.getType('json');

                if (data) {
                    ctx.type = type;
                    ctx.body = data;
                }
            }
            else {
                await next();
            }
        }
        else {
            await next();
        }

    }

}